<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function Star(uname, age) {
            this.uname = uname
            this.age = age


        }
        // 很对情况下,我们需要手动的利用constructor 这个属性指回 原来的构造函数
        // Star.prototype.sing = function() {
        //     console.log('我会唱歌');
        // }
        Star.prototype = {
            constructor: Star,//在对象里手动添加constructor属性,让他指回原来的构造函数
            sing: function () {
                console.log('我会唱歌');
            },
            moveie: function () {
                console.log('我会跳舞');
            }

        }
        var ldh = new Star('刘德华', 18)
        var zxy = new Star('张学友', 20)
        console.log(Star.prototype)
        console.log(ldh.__proto__)
        // console.log(Star.prototype.constructor);//Object
        // console.log(ldh.__proto__.constructor);//Object
        // 如果我们修改了原来的原型对象,并且我在修改的时候是以对象的形式来进行赋值的 那这个时候我们必须手动 的利用constructor在指回原来的构造函数 这样我们就知道我们的对象是通过那个构造函数创建出来的。

        // 在我们原型里面有一个constructor这个属性 它的主要作用就是是告诉我们 你这个对象到底是通过那个构造函数创建出来的 拿在某些特殊的情况下 比如说 我把我这个原型对象做了个修改 给他做了个对象的赋值操作 这个时候呢 他就会把原来的constructor属性给覆盖掉了 那怎么办呢 此时我们做一步操作 我们在在这个对象里面在手动添加一个constructor属性 让他指回原来的构造函数(constructor=构造函数名)这样我们就知道这个对象到底是通过那个构造函数创建出来的。这一点一定要记住

    </script>
</body>

</html>